package com.xavier.dong.sentinel.demo.auth;

import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;

/**
 * 黑白名单的作用
 *
 * @author xavierdong
 */
@Component
public class CustomRequestOriginParser implements RequestOriginParser {

    @Override
    public String parseOrigin(HttpServletRequest request) {
        // <X> 从 Header 中，获得请求来源
        // 我们从请求头的 "s-user" 对应的值，作为请求来源。
        // 注意，Sentinel 黑白名单的控制，一般是服务和服务之间的调用。例如说，配置订单服务允许调用用户服务
        String origin = request.getHeader("s-user");
        // <Y> 如果为空，给一个默认的
        // 我们判断未获得请求来源的时候，设置默认为 default。
        // 原因是，Sentinel 提供的 AuthorityRuleChecker 在进行黑白名单控制时，
        // 如果请求来源为空，直接就通过了 =。=
        if (StringUtils.isEmpty(origin)) {
            origin = "default";
        }
        return origin;
    }

}